PROJECTENGRAM

EVOLUTION OF PROGRAMMING LANGUAGES

Tags: #◇Computer Science #◇CSADPRG #◇Conceptual #◇Evolution of Programming Languages

◇Overview

The evolution of programming languages highlights a progression from early machine codes and pseudocodes toward more abstract, human-readable, and versatile languages. Early developments focused on specific domains like scientific computing (Fortran) and business processing (COBOL), driven by hardware limitations where machine efficiency outweighed programmer efficiency. Over time, as computer capabilities expanded and software complexity grew, languages evolved to incorporate structured programming, data abstraction, object-oriented paradigms, and logic programming, continuously optimizing for programmer productivity and expressive power.

◇Key Definitions

  • Pseudocode: Early alternative to direct machine code programming designed to address issues of poor readability, modifiability, and tedious expression coding.
  • Orthogonality: A design principle where a relatively small set of primitive constructs can be combined in a relatively small number of ways to build the control and data structures of the language (seen in ALGOL 68).
  • Coroutines: A kind of subprogram that allows execution to be suspended and resumed, pioneering data abstraction (introduced in SIMULA 67).
  • Logic Programming: The use of a formal logic notation to communicate computational processes to a computer, usually operating as an inferencing process on a database of facts and rules (e.g., Prolog).
  • Scripting Languages: Initially, languages used by putting a list of commands (a script) into a file to be interpreted sequentially, later evolving into more sophisticated tools for web and general-purpose development (e.g., Perl, JavaScript).

◇Theoretical Framework / Concepts

Early Languages and Paradigms

  • Plankalkül (1945): Designed by Konrad Zuse but never implemented. It featured advanced data structures (floating-point, arrays, records) and invariants (similar to assertions in Java).
  • Pseudocodes (1949): E.g., Short Code (1949) and Speedcoding (1954). Emerged because writing direct machine code was tedious and error-prone, lacking indexing and floating-point support.
  • Fortran (1957 - 1990): The first major scientific language.
    • Fortran I (1957): Focused heavily on machine efficiency. Introduced if statements, do loops, and formatted I/O, but lacked data typing and separate compilation.
    • Evolution: Fortran II added independent compilation. Fortran IV introduced explicit typing. Fortran 77 added character handling and IF-THEN-ELSE. Fortran 90 added modules, dynamic arrays, pointers, and recursion.
  • LISP (1959): Designed for AI and symbolic computation at MIT. It pioneered functional programming, based on lambda calculus, with control via recursion and conditional expressions instead of variables and assignment.
  • ALGOL 58 & 60 (1958 - 1960): Designed for communicating algorithms with mathematical notation.
    • ALGOL 58: Formalized data types, introduced block structure concepts.
    • ALGOL 60: Introduced block structure, local scope, pass-by-value/name, recursive procedures, and stack-dynamic arrays. It became the first machine-independent language with a formally defined syntax (BNF), influencing all subsequent imperative languages.
  • COBOL (1960): Designed for business data processing (based on FLOW-MATIC). Required to look like simple English. Introduced hierarchical data structures (records) and a distinct Data Division. Heavily supported by the US DoD.

Multipurpose, Systems, and Dynamic Languages

  • BASIC (1964): Designed for ease of use by non-science students; prioritized user time over computer time.
  • PL/1 (1965): Attempted to merge the needs of scientific and business users. Introduced unit-level concurrency, exception handling, and pointers.
  • Dynamic Languages:
    • APL (1962): Highly expressive, based on hardware description, famous for matrix operators but notoriously difficult to read.
    • SNOBOL (1964): Powerful string pattern matching.
  • C (1972): Designed for systems programming at Bell Labs. Evolved from B and ALGOL 68. Features a powerful set of operators but poor type checking; heavily tied to UNIX.
  • Pascal (1971): Designed primarily for teaching structured programming; small and simple.
  • Prolog (1972): A non-procedural, logic-based language that acts as an intelligent database inferring truths of given queries.

The Rise of Abstraction and Object-Oriented Programming (OOP)

  • SIMULA 67 (1967): Originally for system simulation. Introduced the concept of classes containing both local data and functionality, marking the beginning of data abstraction.
  • Smalltalk (1972-1980): Developed at Xerox PARC. The first full implementation of an object-oriented language (data abstraction, inheritance, and dynamic type binding) and pioneered the graphical user interface.
  • Ada (1983): Developed by the DoD with huge design effort. Notable for packages (data abstraction), exception handling, and concurrency. Ada 95 added true OOP support.
  • C++ (1985): Combined imperative features of C with OOP features inspired by SIMULA 67, including exception handling.
  • Java (1995): Developed at Sun for embedded devices, based on C++ but significantly simplified. It is purely object-oriented (imperative-based OOP), supporting references instead of pointers, and features built-in concurrency.

Scripting Languages Evolution

  • Perl (1972): Developed by Larry Wall (combining sh and awk). Features implicit variables, dynamic sparse arrays, and associative arrays (hashes). Powerful but can be unsafe due to weak typing between strings and numbers.
  • JavaScript (1995): Originally Mocha/LiveScript by Netscape. Primarily designed for client-side web programming, DOM manipulation, and dynamic HTML validation.

◇Examples

  • Plankalkül Notation:
    • A(7) := 5 * B(6)
    • Used subscripts and strict typing notation.
  • Functional Paradigm (LISP-style concept):
    • Processing depends on atoms and lists.
    • Operations heavily utilize recursion rather than traditional for or while loops.
  • Scripting Pattern (Perl/JS concept):
    • Dynamic interpretation of commands stored in simple text files ("scripts").

◇References & Navigation

CONFIRMATION // 理解度の確認

ACTIVE RECALL VERIFICATION

Select an answer to verify conceptual comprehension and reveal the technical rationale.

Q1

Which early programming language was designed by Konrad Zuse but never implemented?

Q2

What design principle involves combining a small set of primitive constructs in a few ways to build control and data structures, as seen in ALGOL 68?

Q3

Which language was the first major scientific language and focused heavily on machine efficiency?

Q4

LISP pioneered which programming paradigm?

Q5

What was a key contribution of ALGOL 60 to programming language history?

Q6

Which language was designed for business data processing and was required to look like simple English?

Q7

Which language introduced the concept of classes containing both local data and functionality, marking the beginning of data abstraction?

Q8

What was Smalltalk's major contribution to programming languages?

Q9

Prolog operates under which programming paradigm?

Q10

Which language was developed by Larry Wall and features implicit variables and associative arrays (hashes)?